smart pointer
https://en.wikipedia.org/wiki/Smart_pointer
GPT-4.icon
スマートポインタ(Smart Pointer)とは、単純なメモリアドレスの保持に加えて、リソース管理を自動化する機能を持つポインタのことです。
普通のポインタ(raw pointer)は、単にメモリアドレスを格納するだけで、メモリの割り当てや解放を手動で行う必要があります。
一方、スマートポインタは参照カウントやスコープ管理を行い、適切なタイミングでリソースを開放することで、メモリリークやダングリングポインタのリスクを低減します。
普通のポインタとの違い
table:table
特性 普通のポインタ (int* ptr) スマートポインタ (std::shared_ptr<int> ptr)
メモリの所有権 手動管理 スマートポインタが管理
メモリ解放の責任 delete を手動で呼ぶ スコープを抜けると自動解放
参照カウント なし あり (shared_ptr)
コピー時の動作 単純にアドレスをコピー 参照カウントを増減
安全性 手動管理のためエラー発生しやすい 自動管理で安全性が向上
C++のスマートポインタ
C++ では、std::unique_ptr、std::shared_ptr、std::weak_ptr などのスマートポインタが提供されています。
Rustのスマートポインタ
Rust では、スマートポインタの概念が C++ とは少し異なり、所有権システムに密接に関係しています。
Box<T>
Rc<T>
Arc<T>
RefCell<T>
Mutex<T>
C++とRustのスマートポインタの違い
table:table
言語 スマートポインタ 目的 C++との比較
C++ std::unique_ptr 単独所有 Box<T> に類似
C++ std::shared_ptr 参照カウント管理 Rc<T> に類似
C++ std::weak_ptr 循環参照防止 Weak<T> に類似
Rust Box<T> ヒープ確保 unique_ptr に近い
Rust Rc<T> 参照カウント管理(スレッド不可) shared_ptr に近い
Rust Arc<T> スレッドセーフな参照カウント shared_ptr に近いがスレッドセーフ
Rust RefCell<T> 実行時可変性チェック C++のmutable shared_ptr に近い